package com.itheima.service.db.impl;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.UmsAdmin;
import com.itheima.domain.UmsAdminRoleRelation;
import com.itheima.mapper.UmsAdminMapper;
import com.itheima.mapper.UmsAdminRoleRelationMapper;
import com.itheima.service.db.UmsAdminService;
import com.itheima.util.R;
import com.itheima.vo.PageBeanVo;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;
import java.util.Map;

import java.util.List;

@DubboService
public class UmsAdminServiceImpl implements UmsAdminService {

    @Autowired
    UmsAdminMapper umsAdminMapper;

    @Autowired
    UmsAdminRoleRelationMapper umsAdminRoleRelationMapper;

    //根据用户名查询用户
    @Override
    public UmsAdmin findByOne(String username, String password) {

        LambdaQueryWrapper<UmsAdmin> qw = new LambdaQueryWrapper<>();
        qw.eq(UmsAdmin::getUsername,username).eq(UmsAdmin::getPassword, SecureUtil.md5(password));

        if (qw != null){
            UmsAdmin umsAdmin = new UmsAdmin();
            umsAdmin.setLoginTime(LocalDateTime.now());
            umsAdminMapper.update(umsAdmin,qw);
        }

        return umsAdminMapper.selectOne(qw);
    }

    // 根据用户名或姓名分页获取用户列表
    @Override
    public PageBeanVo findByList(Integer pageNum, Integer pageSize,String keyword) {
        // 创建分页构造器
        Page<UmsAdmin> page = new Page<>(pageNum,pageSize);

        // 创建条件查询构造器
        LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(StrUtil.isNotEmpty(keyword),UmsAdmin::getUsername,keyword)
                .or().like(StrUtil.isNotEmpty(keyword),UmsAdmin::getNickName,keyword);

        Page<UmsAdmin> umsAdminPage = umsAdminMapper.selectPage(page, queryWrapper);

        return new PageBeanVo(pageNum,pageSize,umsAdminPage.getTotal(),umsAdminPage.getRecords());
    }

    // 添加用户
    @Override
    public UmsAdmin userRegister(UmsAdmin umsAdmin) {
        umsAdminMapper.insert(umsAdmin);
        LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UmsAdmin::getId,umsAdmin.getId());
        UmsAdmin admin = umsAdminMapper.selectOne(queryWrapper);
        return admin;
    }

    // 修改指定用户信息
    @Override
    public void updateMessage(Integer id, UmsAdmin umsAdmin) {
        // 构建条件构造器(根据id进行查询)
        LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UmsAdmin::getId,id);
        UmsAdmin admin = umsAdminMapper.selectOne(queryWrapper);
        admin.setUsername(umsAdmin.getUsername()); // 账号
        admin.setPassword(SecureUtil.md5(umsAdmin.getPassword())); // 密码
        admin.setNote(umsAdmin.getNote()); // 备注
        admin.setEmail(umsAdmin.getEmail()); // 邮箱
        admin.setNickName(umsAdmin.getNickName()); // 姓名
        admin.setStatus(umsAdmin.getStatus()); // 是否启用
        umsAdminMapper.update(admin,queryWrapper);
    }

    // 删除指定用户信息
    @Override
    public Integer deleteUserMessage(Long id) {
        // 创建条件构造器
        LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UmsAdmin::getId,id);
        UmsAdmin umsAdmin = umsAdminMapper.selectOne(queryWrapper);
        if (umsAdmin.getStatus() == 0) {
            // 调用mapper中的delete
            umsAdminMapper.delete(queryWrapper);
            return 1;
        } else {
            return 0;
        }
    }

    // 修改账号状态
    @Override
    public void updateStatus(Long id) {
        LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UmsAdmin::getId,id);
        UmsAdmin umsAdmin = new UmsAdmin();
        umsAdmin.setStatus(0);
        umsAdminMapper.update(umsAdmin,queryWrapper);
    }



}
